package basic_grammar

import "fmt"

//map
// var 变量名 map[keytype] valuetype
// keytype 通常用int,string,必须可以用==来判断(map,slice,func 不可以)
// 引用类型

func TestMap() {
	//defineMap()
	//
	//c := map[string]string{
	//	"name":"塞尔达",
	//	"sex": "female"}
	//changeMap(c)
	//fmt.Println(c)
	//operateMap()
	ergodicMap()
}

//map创建必须make
//可以单独声明后再用make
//或者创建时直接赋值,底层也是用的make
func defineMap() {
	// 1.使用make
	a := make(map[string]string)
	a["name"] = "林克"
	a["sex"] = "male"
	fmt.Println(a)

	// 2.先声明后make
	var b map[string]string
	b = make(map[string]string)
	b["name"] = "米法"
	b["sex"] = "female"
	fmt.Println(b)

	// 3.直接赋值
	c := map[string]string{
		"name": "塞尔达",
		"sex":  "female"}
	fmt.Println(c)
}

// 相同的key会冲撞掉
// map是无序的
func changeMap(param map[string]string) {
	param["name"] = "海拉鲁大陆"
}

// map的CRUD
func operateMap() {
	//增加和更新
	//map[key]=value
	//查
	// map[key]

	example := map[string]string{
		"province": "山东",
		"city":     "青岛"}
	//删除
	delete(example, "province")
	fmt.Println(example)
}

// 遍历map
func ergodicMap() {
	example := map[string]string{
		"province": "山东",
		"city":     "青岛",
		"area":     "市南区",
		"street":   "宁夏路"}

	for k, v := range example {
		fmt.Println(k, v)
	}
}
